package com.jyx.designpatterns.singleton;

public class Singleton {

	@SuppressWarnings("static-access")
	public static void main(String[] args) {
		//使用getInstance方法获得类的实例，可以测试使用构造函数的效果
		Singletons a,b,c,d,e;
		a = Singletons.getInstance();
		b = Singletons.getInstance();
		c = Singletons.getInstance();
		d = Singletons.getInstance();
		e = a.getInstance();
		
		System.out.println("单例测试：" + a );
		System.out.println("单例测试：" + b );
		System.out.println("单例测试：" + c );
		System.out.println("单例测试：" + d );
		System.out.println("单例测试：" + e );
		
	}
}

/**
 * 单例模式
 * @author jyx
 * @email jiangyongxing@myzczk.com
 * @Title: Singleton
 * @description: Singleton
 * @Company: myzczk
 * @date 2016年9月6日
 * @version 0.5
 */
class Singletons {
	
	private static Singletons a = null;
	
	/** 无参构造方法 */
	private Singletons(){}
	
	/** 获取单一对象实例的方法 */
	public static Singletons getInstance(){
		//synchronized 关键字意思为锁定一个对象。
		//随意锁定一个对象就可以保证即使为多线程的程序也可以保证代码块的唯一执行
		synchronized ("s") {
			if(a == null){
				a = new Singletons();
			}
		}
		
		return a;
	}
	
}

class Car {

	private static Car car = new Car();
	
	public void run(){
		System.out.println("冒着烟，奔跑");
	}
	
	private Car(){}
	
	public static Car getInstance(){
		return car;
	}
	
}

